package com.sc.nft.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.dto.ActivityPageDTO;
import com.sc.nft.dto.MallGoodsLabelQueryPageDTO;
import com.sc.nft.dto.MiniMallActivityPageDTO;
import com.sc.nft.dto.QueryMiniMallActivitySelectDTO;
import com.sc.nft.entity.MallActivity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sc.nft.entity.dto.ActivityCouponsProductDTO;
import com.sc.nft.entity.dto.ActivityShareProductDTO;
import com.sc.nft.entity.dto.PreferenceActivityDTO;
import com.sc.nft.entity.vo.mall.*;
import com.sc.nft.enums.ProductTypeEnum;
import com.sc.nft.enums.task.ActivityTypeEnum;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * IP商城营销活动表(sc_mall_activity)数据Mapper
 *
 * @author zxy
 * @description IP商城
 * @since 2023-05-10 16:59:01
 */
@Mapper
public interface MallActivityMapper extends BaseMapper<MallActivity> {

    IPage<ActivityPageDTO> queryActivity(Page toMp, @Param("daoId") Long daoId, @Param("status") Boolean status, @Param("recommend") Boolean recommend, @Param("approvalStatus") Integer approvalStatus, @Param("productType") Integer productType,
                                         @Param("activityType") Integer activityType, @Param("productName") String productName,@Param("isMiniMall") Boolean isMiniMall);


    IPage<ActivityPageVO> activityPage( Page page, @Param("daoId") Long daoId,@Param("categoryId") Long categoryId, @Param("activityType")Integer activityType,
                                        @Param("productType") Integer type,@Param("productName") String productName,@Param("isShow") Integer isShow,@Param("isMiniMall") Boolean isMiniMall);

    IPage<HotSaleActivityPageVO> hotSaleProductPage(@Param("productNamem") String productNamem,@Param("hotSaleSort") Integer hotSaleSort, Page page);

    IPage<BargainPriceProductPageVO> bargainPriceProductPage(Page page, @Param("productName") String productName, @Param("bargainPriceSort") Integer bargainPriceSort,@Param("isShow") Integer isShow);

    IPage<CategoryProductPageVO> categoryProductPage(Page page,@Param("id") Long id,@Param("productName") String productName,@Param("sort") Integer sort, @Param("isVirtual")Boolean isVirtual,@Param("isShow") Integer isShow,@Param("showMiniMall") Boolean showMiniMall);

    IPage<AdminSalesPageVO> getSalesPage(Page page);

    /**
     * 获取优惠券活动下的商品列表
     *
     * @param page
     * @param ids
     * @return
     */
    Page<ActivityCouponsProductDTO> getActivityCouponsProductDTOPage(Page page, @Param("ids") List<Long> ids,@Param("status") Integer status);

    /**
     * 获取优惠券活动下的商品列表
     *
     * @param ids
     * @return
     */
    List<ActivityCouponsProductDTO> getActivityCouponsProductDTOPage(@Param("ids") List<Long> ids,@Param("status") Integer status);

    /**
     * 获取可添加至优惠券下的商品列表
     *
     * @param page
     * @param productName
     * @return
     */
    Page<ActivityCouponsProductDTO> getActivityCouponsCanUseProductDTOPage(Page page, @Param("productName") String productName);

    /**
     * 获取可添加至分享购下的商品列表
     *
     * @param page
     * @param productName
     * @return
     */
    Page<ActivityShareProductDTO> getActivityShareCanUseProductDTOPage(Page page, @Param("productName") String productName, @Param("daoId") Long daoId);

    /**
     * 全部分类
     * @param page
     * @param daoId
     * @param categoryId
     * @param activityType
     * @param type
     * @param productName
     * @param sort
     * @return
     */
    IPage<ActivityPageVO> allCategories(@Param("page") Page page, @Param("daoId") Long daoId, @Param("categoryId") Long categoryId, @Param("activityType")Integer activityType,
                                        @Param("productType") Integer type, @Param("productName") String productName, @Param("sort") Integer sort,@Param("isMiniMall") Boolean isMiniMall);

    /**
     * 获取好物优选商品
     * @param page
     * @return
     */
    Page<PreferenceActivityDTO> preferenceProductPage(Page page);
    IPage<AdminSalesPageVO> getProductPage(Page mp);

    IPage<MiniMallActivityPageDTO> queryActivityByMiniMall(Page toMp, @Param("daoId") Long daoId, @Param("status") Boolean status, @Param("recommend") Boolean recommend, @Param("approvalStatus") Integer approvalStatus, @Param("productName") String productName,@Param("isMiniMall") Boolean isMiniMall, @Param("templateId") Long templateId);

    List<QueryMiniMallActivitySelectDTO> QueryMiniMallActivitySelect(@Param("id") Long id, @Param("productName") String productName);

    IPage<MallGoodsLabelQueryPageDTO> queryByMallLabel(@Param("productName") String productName, @Param("categoryId") Long categoryId, @Param("startTime") Date startTime, @Param("endTime") Date endTime, Page mp);
}
